{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "ab3ae66a",
   "metadata": {},
   "source": [
    "第一步：数据准备"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3bad799",
   "metadata": {},
   "source": [
    "1.导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "0a2a9149",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71103f9f",
   "metadata": {},
   "source": [
    "2.提取特征，划分数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "fc1a209c",
   "metadata": {},
   "outputs": [],
   "source": [
    "x,y=load_iris().data[:,2:4],load_iris().target\t\t                                   #提取花瓣长度与花瓣宽度两个作为特征，训练模型\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,test_size=50)        #将数据集拆分为训练集与测试集，随机数种子，样本50"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62fb10e0",
   "metadata": {},
   "source": [
    "第二步：训练与评估模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "011d23e0",
   "metadata": {},
   "source": [
    "1.导入逻辑回归模型与评估分类准确率的方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "48629c2b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import accuracy_score"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecc42747",
   "metadata": {},
   "source": [
    "2.定义与训练逻辑回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "126a936c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-5 {color: black;}#sk-container-id-5 pre{padding: 0;}#sk-container-id-5 div.sk-toggleable {background-color: white;}#sk-container-id-5 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-5 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-5 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-5 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-5 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-5 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-5 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-5 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-5 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-5 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-5 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-5 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-5 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-5 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-5 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-5 div.sk-item {position: relative;z-index: 1;}#sk-container-id-5 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-5 div.sk-item::before, #sk-container-id-5 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-5 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-5 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-5 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-5 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-5 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-5 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-5 div.sk-label-container {text-align: center;}#sk-container-id-5 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-5 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-5\" type=\"checkbox\" checked><label for=\"sk-estimator-id-5\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model=LogisticRegression()\t\t#建立逻辑回归模型\n",
    "model.fit(x_train,y_train)      #训练模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b1223d3",
   "metadata": {},
   "source": [
    "3.#模型评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "1a174615",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型预测准确率： 0.98\n"
     ]
    }
   ],
   "source": [
    "ac=accuracy_score(y_test,model.predict(x_test))\n",
    "print(\"模型预测准确率：\",ac)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd5980bc",
   "metadata": {},
   "source": [
    "第三步：第三步显示分类效果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73443217",
   "metadata": {},
   "source": [
    "1.导入Matplotlib与NumPy库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "daa698fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.colors import ListedColormap                       #颜色模块\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d68e709b",
   "metadata": {},
   "source": [
    "2.绘制分类界面、绘制3种类别鸢尾花的样本点（散点图）、设置坐标轴的名称并显示图形"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "d4b8c66a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Hjwom81W5fqUlBSNGDFCDz/8sFeKA4CA1KlT2QPCVbFYytbXZvvLuDI3Dk04gYrcCjiNGzfWu+++qxEjRshqteq1115TWlqann32Wb3xxhuKjY3V6NGjlZmZ6at6AcB4qallbz9dHlrK34pKTa3d9lWoKeTQhBOoyK2AU+7QoUOOWY2jo6MVFRWl+vV/fv2QN6gAmFpUVNmr3d27S3FxZUElLq7se1WvfLu7vQeCpQlndLR3twOccWsenPJZiqdMmaKHH35YH3/8sbKysiRJ69evl8VikdVq1eDBg3X+/HmfFe0J5sFBoOMtKrjCDL2qmMkY7vB0HhyX36Javny5LBaL2rRpo4iICLVv317Rl0Ts559/XtnZ2bJYLBo7lqFQAPAFMzTkJLzAH1y6RTVz5kwNGzZMUllbhri4OI0cOVIJCQn69NNPde+99+r3v/+9tmzZoj179uiVV15x6eRnz55VUlKSjh075tL2gwYNksVicXx69erl0n4AYBbfn2ugY8dU6bNjh7RpU9mvVa3n0UiEGpdGcIYOHaqHH35YnTp10rx585STk6OXXnpJWVlZatasmdq2bavZs2drwoQJWrhwofr27VvjMc+ePasBAwa4HG4kafv27dq7d69atmwpiWd9ALjJ3f5R1fnhB2nhQunixZ+XRURIQ4dKP/5Y+RwdO0rffuveufPypGXLyhKK3a7vlayr9Z3Hl09/J4QSlwJOkyZNft4homyXqKgohYWF6bbbbtNtt90mSfrf//1fPfDAA9qwYYPatWtX7TGHDBmiBx54QFu3bnWp0JMnT8put6t9+/YubQ8AFVTVD8pqldatkw4edO9h3x9+kN59t/LyixelDz6ouMxqlb7+WvrmG6mkxPVz5+VJM2dWCFB5qt2DwtU99wKYjVtvUVksFv3ud79TXFycnnrqKTVs2FDDhg3TsGHD9Pjjj6tfv376wx/+oEmTar4/PHfuXLdmPd62bZtKSkrUsmVLxcTEaMiQIcrOznanfAChzJv9oBYudP/8Fy+6d+5lyyqODgFwi0eviQ8cOFAFBQV6+umndfPNN6tLly5KSUmRVDYys3LlShUUFFR7jKSkJLfOefDgQd14441auXKltmzZooyMDKWlpTnd3mazyWq1VvgACGGu9INylTeDh7Nzu3H7HkBlbvWiOn36tG677Tbdc889iouL00MP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64033lDdunUdy2w2m4qLi5Weni5JKioqktVqdbT/ABDYCDgAfKZt27ayWq2O7507d9af/vQn3XfffZKkRo0aac2aNWrfvr1jmy1btmjp0qWqU6eOVqxYoYYNG6p169aKiYnRTTfdpJ9++kmpqamKiIhQaWmpSkpKtGPHDqc1nDlzRr169dLtt9+uuXPnVtmAtLS0VIMHD9Zbb72loqIiLVq0SA899JAiIiJks9k0d+5cjRw5MiSaHAJmwS0qAH7z0EMPqXv37pLKnr/58MMP1aZNmwrbpKSk6OzZs5oyZYpOnz6thIQEx7rw8HD16tVLLVq00OrVq5WcnKypU6c6Pd93332nrl27qmvXrpo3b1613dUtFosKCwtVVFSkRx991LFteTPL0tJSXbhwwfOLB+BXBBwAfrFmzRqNHz9eX375pSRp+vTpWrdunerVq6fz589r2bJlkqR69eopJSVF6enpysrKUs+ePR2d4CMjI1VUVKSBAwcqPT1dBw8eVI8ePSSVdZLPz8/XhQsXdPHiRZWUlCguLk4PPfSQpk+fLpvNpgsXLujChQs6f/58hZElu92u8PBw/dd//ZdSU1MlSR07dlSHDh10yy23SCobfbrxxhsr7AcgcHGLCoDPbdq0Sffee69efvllDR06VFJZWJHKnnW57777dPbsWXXr1k2bNm3SsmXLNGfOHF28eFFvvfWWrrjiCtntdsXExOjzzz/Xt99+q4KCAuXk5Khv375KT0/XnDlzNGHCBEVGRqq4uFilpaX6/PPPdfHiRb300ksVnskpLi5Wnz59tGLFCknShQsXVKdOHW3atEkFBQWKiYnRZ599Jqns2Zvrr79eu3btqnYECEBg4W8rAJ9atmyZ+vXrp/r16+uqq66qsO7UqVO64447FB0drfXr16tx48a68847tWnTJsXFxem7777TE0884Xj2pXHjxrrpppu0bds29erVS3/9618dDwGPGTNGRUVFys/P11/+8hc9+OCDys/P17p169SsWTNlZ2crPz9f+fn5stlsjnAjSefPn3c8fGyxWPSHP/xBM2bM0IwZM/TOO+/oD3/4gy5evOin3zEA3kDAAeAzx44d0+jRo7VixQp16dLFsbykpETHjx/XRx99pEGDBmnp0qWON5h+/PFHLV26VLm5uVq+fLm2bt2qBg0aSCp7aHnv3r2OsGG322Wz2aqtITU1Vb/4xS/09ttvO90mMzNTzZs3V1pamtq3b6+VK1dqw4YNjs/q1av15z//uba/HQD8iIADwGcSExP1/fff67bbbpNUdmto7ty5at++vVasWKGxY8dq/PjxjmdsJCk3N1e7du1SXl6e9uzZo2+++UbXXnutJOnqq6/Wrl279Nhjj+njjz/W008/rTvvvLPaGgoKCjRz5kxNmjRJmzZtqnKbw4cPq2XLlpo8ebIOHTqkxo0ba8qUKdq1a5dmz56tixcv6plnnvHS7woAfyDgAPCpevXqOf65Tp06+v777zV16lSNHj1aERE/PwZYUlKiDRs26Prrr9cTTzyhxMREvfTSS8rOzlaHDh0klU3g16pVKw0fPlxDhgzR1KlTtXr1aqfn/vvf/67k5GRZLBZNmjRJffv21SeffFJhG6vVql27dqlTp06SpIiICC1cuFAjR47UzJkz9cADD+jTTz+tcv4cAIGLgAPAL0pKSlRSUqKpU6dq4MCBkspeFbfb7ZKktWvXqnfv3srPz9ebb76pBx98UPv27ZPValVWVpbWrl2rxYsXq0OHDpowYYJKS0sd+14uOztbn3/+uYYMGaIJEyaoU6dOGj9+vF5++WX99re/Vc+ePR2zIC9YsEBdu3ZVbGyspLKHnk+cOKHWrVtr7NixatKkiY4ePapDhw7xBhUQRAg4APyisLCwwjwy3bp108aNG5WUlKTExEQ9+eSTeuWVV5SZmamNGzdq5MiRysnJ0YsvvqirrrpK69at08aNGzVu3DjNmDFDRUVFTp+/OXjwoNq2bavdu3frj3/8o+ONrTFjxmjHjh1q1aqV47ZXfn6+Ro8erSVLliglJUXXXnut3n33XU2YMEE5OTkaO3asVq1apYEDByohIUGjR4/2/W8WgFqz2J39LxAABKlz584pOjpaMTExLu9js9l07tw5NW/e3Ok2BQUFjtfVAQQ2Ag4AADAdblEBAADTIeAAAADTIeAAAADTIeAAAADTIeAAAADTIeAAAADTIeAAAADTIeAAAADT+f9FSLFqsSqTIAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制分类界面\n",
    "N,M=500,500                                                       #网格采样点的个数，采样点越多，分类界面图越精细\n",
    "t1=np.linspace(0,8,N)\t\t\t\t                              #生成采样点的横坐标值   0-8，取500个点   横坐标\n",
    "t2=np.linspace(0,3,M)\t\t\t\t                              #生成采样点的纵坐标值    \n",
    "x1,x2=np.meshgrid(t1,t2)\t\t\t\t                          #生成网格采样点\n",
    "x_new=np.stack((x1.flat,x2.flat),axis=1)\t                      #将采样点作为测试点    用来将两个一维数组合并成一个二维数组    axis按列合并，将两个一维数组看成两列\n",
    "y_predict=model.predict(x_new)\t\t\t                           #预测测试点的值\n",
    "y_hat=y_predict.reshape(x1.shape)\t\t\t                       #与x1设置相同的形状\n",
    "iris_cmap=ListedColormap([\"#ACC6C0\",\"#FF8080\",\"#A0A0FF\"])    #设置分类界面的颜色\n",
    "\n",
    "\n",
    "#绘制3种类别鸢尾花的样本点（散点图）\n",
    "plt.pcolormesh(x1,x2,y_hat,cmap=iris_cmap)\t                #绘制分类界面 x1x2所有采样点的横纵坐标的集合，类别，该类别对应的颜色\n",
    "plt.scatter(x[y==0,0],x[y==0,1],s=30,c='g',marker='^')\t                                    #绘制标签为0的样本点\n",
    "plt.scatter(x[y==1,0],x[y==1,1],s=30,c='r',marker='o')            #绘制标签为1的样本点\n",
    "plt.scatter(x[y==2,0],x[y==2,1],s=30,c='b',marker='s')\t\n",
    "\n",
    "\n",
    "#设置坐标轴的名称并显示图形\n",
    "plt.rcParams['font.sans-serif']='Simhei'\n",
    "plt.xlabel('花瓣长度')\n",
    "plt.ylabel('花瓣宽度')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml-241",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.20"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
